///////////////////////////////////////////////////////////////////////////////
//                                                                             
//  Copyright (C) 2024  ZengZong (Split/Implode) <472934453@qq.com>     
//
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <regex>

using namespace std;

template <typename T>
T implode(T * arr)
{
    string response;
    for (int i = 0; i < ((sizeof(arr[0])/sizeof(arr))+1); ++i)
    {
        response+=arr[i];
    }
    return response;
}

template <typename S,typename G>
S implode(S * arr, G s)
{
    string response;
    int size=((sizeof(arr[0])/sizeof(arr))+1);
    if( size < 1 ){
        return "";
    }
    
    for (int i = 0; i < size; ++i)
    {
        if(i==0) response+=arr[i];
        else response=response + s + arr[i];
    }
    return response;
}

template <typename S,typename G>
S* split(S& s,G& f)
{
    int px,p=0;
    px++;
    regex r1(f);
    for (sregex_iterator it(s.begin(),s.end(), r1), endIt;it != endIt; ++it) 
    {
        px++;
    }
    string *arr=new string[px];
    int t=s.find(f);
    arr[0]=s.substr(0,t);
    // cout<<arr[0]<<endl;
    s=s.substr(t+f.length(),-1);
    for(int i=1;i<px;i++)
    {
        t=s.find(f);
        if(p>0) break;
        if(t==-1&&p==0) p++;
        arr[i]=s.substr(0,t);
        s=s.substr(t+f.length(),-1);
    }
    return arr;
}

// int main(int argc, char const *argv[])
// {
//     string s="hello,,world,,huii,,uuu,,ghhh,gggg";
//     string f=",,";
//     auto arr=split(s,f);
//     std::cout << arr[0] << endl << arr[1] <<endl;
    
//     string arr1[5]{"oooo","zeng","zong","jiji","fdfd"};
//     string ff=".";
//     string ss=implode(arr1,ff);
//     std::cout << ss <<endl;

    
//     string sss=implode(arr1);
//     std::cout << sss <<endl;
//     return 0;
// }



